package com.tbit.main.dao.log;

import com.tbit.main.pojo.MoveLog;
import com.tbit.main.pojo.MoveLogSta;
import com.tbit.main.pojo.VO.WorkOrderVO;
import com.tbit.main.pojo.dto.TodoItemsDTO;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 挪车记录
 *
 * @author Leon
 * 2019年11月12日 下午4:44:13
 */
public interface MoveLogDao {
    /**
     * 添加
     *
     * @param moveLog
     */
    Integer insert(MoveLog moveLog);

    /**
     * 按时间分组统计
     *
     * @param params
     * @return
     */
    List<MoveLogSta> groupByTime(Map<String, Object> params);

    /**
     * 根据时间查询
     *
     * @param params
     * @return
     */
    List<MoveLog> getByTime(Map<String, Object> params);

    /**
     * 根据id查询
     *
     * @param moveLogId
     * @return
     */
    MoveLog getById(Integer moveLogId);

    /**
     * 根据根据运营区域和时间分组统计总和
     *
     * @param params
     * @return
     */
    Integer groupByAccountIdTime(Map<String, Object> params);

    /**
     * 根据根据分区和时间分组统计总和
     *
     * @param params
     * @return
     */
    Integer groupByRegionIdTime(Map<String, Object> params);

    /**
     * 根据运营区域按天分组
     *
     * @param params
     * @return
     */
    List<Map<String, Object>> getGroupByDay(Map<String, Object> params);

    /**
     * 根据分区按天分组
     *
     * @param params
     * @return
     */
    List<Map<String, Object>> getRegionIdGroupByDay(Map<String, Object> params);

    /**
     * 统计前一天的数据
     *
     * @return
     */
    Map<String, Object> statYesterdayOrder(Map<String, Object> params);

    /**
     * 统计前一天的数据
     *
     * @return
     */
    Map<String, Object> statRegionIdYesterdayOrder(Map<String, Object> params);

    /**
     * 根据ids查询
     *
     * @param moveLogIds
     * @return
     */
    List<MoveLog> getMoveLogIds(@Param("moveLogIds") String moveLogIds);

    /**
     * 获取换电 挪车 调度今日数量
     * @param dto dto
     * @return List<WorkOrderVO>
     */
    List<WorkOrderVO> selectTodayCount(TodoItemsDTO dto);

    /**
     * 根据车辆id查询24小时内最后有效挪车记录
     *
     * @param machineId 车辆id
     */
    MoveLog selectLast24HourFirstValidByMachineId(Integer machineId);
    /**
     * 根据车辆id查询7天内最后有效挪车记录
     *
     * @param machineId 车辆id
     */
    MoveLog selectLast7DayFirstValidByMachineId(Integer machineId);

    /**
     * @description: 根据车辆id获取最近一条挪车记录
     * @author: mo.shanyong
     * @date: 2025/4/18 11:59
     * @param: machineId
     * @return: com.tbit.main.pojo.MoveLog
     */
    MoveLog selectLastOneByMachineId(Integer machineId);

    /**
     * 根据车辆和时间查询
     *
     * @param map
     * @return
     */
    List<MoveLog> getByMachineIdTime(Map<String, Object> map);

    void updateCheckNull(MoveLog moveLog);
}